package cn.edu.gzhmt.cart.domain;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 购物车实体类
 * @author azhuo
 *
 */
public class Cart implements Serializable {

	// 购物车key：商品id， Value：条目
	private Map<String, CartItem> cartItems = new LinkedHashMap<String, CartItem>();

	/**
	 * 获取所有条目
	 * @return
	 */
	public Collection<CartItem> getCartItems() {
		return cartItems.values();
	}

	public CartItem getCartItem(String gid) {

		return cartItems.get(gid);

	}

	public void setCartItems(Map<String, CartItem> cartItems) {
		this.cartItems = cartItems;
	}

	/**
	 * 购物车商品价格总计
	 * @return
	 */
	public double getTotal() {

		BigDecimal total = new BigDecimal("0"); // 价格总计，处理double的不精确问题

		for (CartItem cartItem : cartItems.values()) {
			total.add(new BigDecimal(cartItem.getSubTotal() + ""));
		}

		return total.doubleValue();
	}

	/**
	 * 添加条目
	 * @param cartItem
	 */
	public void addCartItem(CartItem cartItem) {
		String gid = cartItem.getGoods().getGid();

		// 购物车中已经存在该商品，数量相加即可
		if (cartItems.containsKey(gid)) {
			CartItem _cartItem = cartItems.get(gid); // 获取购物车中商品

			_cartItem.setCount(_cartItem.getCount() + cartItem.getCount()); // 更新购物车中商品的数量

			cartItems.put(gid, _cartItem);

		} else {
			cartItems.put(gid, cartItem);
		}
	}

	/**
	 * 清空购物车
	 */
	public void cleanCart() {
		cartItems.clear();
	}

	/**
	 * 删除指定条目
	 * @param gid
	 */
	public void remove(String gid) {
		cartItems.remove(gid);
	}

	@Override
	public String toString() {
		return "Cart [cartItems=" + cartItems + "]";
	}

}
